 //控制层 
app.controller('goodsController' ,function($scope,$controller,$location,itemCatService,typeTemplateService,uploadService,goodsService){
	
	$controller('baseController',{$scope:$scope});//继承
	//定义组合商品对象
   $scope.entity={goods:{},goodsDesc:{itemImages:[],specificationItems:[],customAttributeItems:[]},items:[]}
	//保存商品
	$scope.save=()=>{
    	//添加之前要得到富文本编辑器的内容
        $scope.entity.goodsDesc.introduction = editor.html();
        let url="../goods/add.do";
        ////执行修改操作
		if($scope.entity.goods.id){
			url="../goods/update.do"
		}
        goodsService.save(url,$scope.entity).success(response=>{
			if(response.success){
				//2.2)清空editor的值
				editor.html("");
				//2.3)清空entity的值
				$scope.entity = {};
			}else{
				alert(response.message);
			}
		})
	}
	//定义代表上传的图片对象
	$scope.imageEntity={};
    //文件上传
	$scope.upload=()=>{
        uploadService.upload().success(response=>{
        	if(response.success){	//如果上传成功，就为$scope.imageEntity.url赋值
        		$scope.imageEntity .url = response.message;
			}else{
        		alert(response.message);
			}
		})
	}
	//保存图片
	$scope.savePic=()=>{
        $scope.entity.goodsDesc.itemImages.push($scope.imageEntity);
	}
	//删除图片
	$scope.deleteImg=(img)=>{
        let number = $scope.entity.goodsDesc.itemImages.indexOf(img);
        let list=$scope.entity.goodsDesc.itemImages;
        list.splice(number,1);
	}
	//首先根据父id查询出一级分类列表
	$scope.findByParenId=(parenId)=>{
		goodsService.findByParenId(parenId).success(response=>{
			$scope.categoryList1=response;

		})
	}
	//调用$watch服务监控一级分类的id，查出二级分类列表
	$scope.$watch("entity.goods.category1Id",(newValue,oldValue)=>{
		goodsService.findByParenId(newValue).success(response=>{
			$scope.categoryList2=response;
		})
	})
    //调用$watch服务监控二级分类的id，查出三级分类列表
    $scope.$watch("entity.goods.category2Id",(newValue,oldValue)=>{
        goodsService.findByParenId(newValue).success(response=>{
            $scope.categoryList3=response;
        })
    })
	//根据用户选择的三级分类查出一个分类列表，获取id
    $scope.$watch("entity.goods.category3Id",(newValue,oldValue)=>{
        itemCatService.findOne(newValue).success(response=>{
            //在tb_item_cat这个表中根据分类的id查询出模板id(type_id)
            $scope.entity.goods.typeTemplateId=response.typeId;
        })
    })
	//根据模板id得到模板对象
	$scope.$watch("entity.goods.typeTemplateId",(newValue,oldValue)=>{
		//查询品牌列表和扩展属性
		typeTemplateService.findOne(newValue).success(response=>{
			//得到一个模板对象
			$scope.typeTemplate=response;
			//将品牌转成json对象
			$scope.brandList=JSON.parse(response.brandIds);
            //第二件事情：得到扩展属性并转换为json
            let id = $location.search()["goodsId"];
            //判断goodsid是否存在，存在说明是需要修改，所以不需要进行赋值
            if(!id){
				//将扩展属性转成json对象
				$scope.entity.goodsDesc.customAttributeItems=JSON.parse(response.customAttributeItems);
            }
		})

		//根据模板id查询规格列表，需要把规格选项也添加进来，option
		typeTemplateService.findAllSpec(newValue).success(response=>{
			//赋值
			$scope.specList=response;
		})
	})
	//从集合中查找指定的key对应的值，返回查到的对象
	selectObjByKey=(list,key,value)=>{
        for (let i = 0,len=list.length; i <len ; i++) {
			if(list[i][key]==value){
                //如果在数组中存在此key对应的value值就证明存在此对象 ,返回此对象
				return list[i];
			}
        }
        return null;
	}
	//参数：1.点击事件的对象，2.例如：网络 ,3：规格选项options中的一个，例如:移动4G
	//[{"attributeName":"网络制式","attributeValue":["移动3G","移动4G"]},{"attributeName":"屏幕尺寸","attributeValue":["6寸","5寸"]}] （specificationItems）
	//复选框的选择
	$scope.updateSelection=(event,text,value)=>{
		//第一次，obj为空
		var obj=selectObjByKey($scope.entity.goodsDesc.specificationItems,"attributeName",text);
		//如果obj不会空，说明是第二次
		if(obj){
			//判断复选框是否打勾，若打勾则添加进specificationItems中的attributeValue
			if(event.target.checked){
				obj.attributeValue.push(value);		//添加进specificationItems中的attributeValue，例如：value=移动4G
			}else{		//若没有打勾，则进行移除
				let attrIndex=obj.attributeValue.indexOf(value); 		//得到value值下标
				obj.attributeValue.splice(attrIndex,1);		//从数组中移除该value
				if(obj.attributeValue.length==0){		//若里面attributeValue没有值，则删除整个结果集specificationItems
					//得到specificationItems的其中一个的下标
					let specIndex=$scope.entity.goodsDesc.specificationItems.indexOf(obj);
					//从大数组中删除指定的一个对象
					$scope.entity.goodsDesc.specificationItems.splice(specIndex,1);
				}
			}
		}else {
			//第一次添加的时候，进行初始化
			$scope.entity.goodsDesc.specificationItems.push({"attributeName":text,"attributeValue":[value]});
		}
		//调用动态生成item表数据
		createItemList();
	}
	//动态生成sku列表
	createItemList=()=>{
		//初始化，赋默认值
		$scope.entity.items=[{spec:{},price:0,num:99999,status:'0',isDefault:'0' }];
		//得到所有规格列表
		let specItem=$scope.entity.goodsDesc.specificationItems;
		//动态向items数组中存放值
		//循环遍历，
        for (let i = 0,len=specItem.length; i <len ; i++) {
			//动态赋值
        	$scope.entity.items= createNewItems($scope.entity.items,specItem[i].attributeName,specItem[i].attributeValue);
        }
	}
	//将得到的数据赋值给新list并返回新的list
    createNewItems=(items,attrName,attrValue)=>{
		//定义一个新的list
		let newList=[];
		//循环items
        for (let i = 0,len=items.length; i <len ; i++) {
        	//得到原始的行的数据
			let oleRow=items[i];
			//循环遍历
            for (let j = 0,len=attrValue.length; j <len ; j++) {
            	//将原始的进行深度克隆，赋值给新的行
            	let newRow = JSON.parse(JSON.stringify(oleRow))
				//对新的行的spec对象赋值
				newRow.spec[attrName]=attrValue[j];
            	//将newRow这个新行放到newList这个集合中
				newList.push(newRow);
            }
        }
        //返回
        return newList;
	}
	//分页显示商品信息
	$scope.search=()=>{
		goodsService.findAllPage($scope.paginationConf.currentPage,$scope.paginationConf.itemsPerPage).success(response=>{
			//当前页面的商品信息
			$scope.goodsList=response.rows;
			//总条目数
			$scope.paginationConf.totalItems=response.total;
		})
	}
	// 定义存放分类的数组
	$scope.categoryList=[];
	$scope.status=["未审核","已审核","审核未通过","已关闭"];
	//查找所有分类，并放进categoryList数组中
	$scope.findCategoryList=()=>{
		itemCatService.findAll().success(response=>{
            for (let i = 0 ,len=response.length; i <len ; i++) {
            	// 将分类列表按照key，value形式放入
				$scope.categoryList[response[i].id]=response[i].name;
            }
		})
	}
	//点击修改进行页面跳转并带一个id参数
	$scope.jumpToGoodsedit=(goodsId)=>{
		location.href="goods_edit.html#?goodsId="+goodsId;
	}
	//根据商品id查询商品实体
	$scope.findOne=()=>{
		//从别的页面获取到goodsId
		let goodsId=$location.search()["goodsId"];
		//调用服务
		goodsService.findOne(goodsId).success(response=>{
			//将组合对象赋值给entity
			$scope.entity=response;
			//将图片信息的json字符串转成json对象
			$scope.entity.goodsDesc.itemImages=JSON.parse($scope.entity.goodsDesc.itemImages);
			//给富文本编辑器赋值
			editor.html($scope.entity.goodsDesc.introduction);
			//将扩展属性字符串转成json对象
			$scope.entity.goodsDesc.customAttributeItems=JSON.parse($scope.entity.goodsDesc.customAttributeItems);
			//将规格列表字符串转成json对象
			$scope.entity.goodsDesc.specificationItems=JSON.parse($scope.entity.goodsDesc.specificationItems);
			//循环遍历itemds数组
            for (let i = 0; i < $scope.entity.items.length; i++) {
            	//获取items对象
				let item=$scope.entity.items[i];
				//将spec字符串转成json对象
				item.spec=JSON.parse(item.spec);
            }
		})
	}
    //根据当前$scope.items中的spec的值来确定是否选择某个规格选项
    //思路：将数据库中查出来中用户打勾的那个规格选项的值与$scope.entity.goodsDesc.specificationItems进行比较，如果在其中就返回true,否则，返回false
	$scope.checkAttribute=(text,value)=>{
		//得到代表用户选择的所有的规格的选项的集合
		let item = $scope.entity.goodsDesc.specificationItems;
		//判断当前用户选择的规格及选项是否在此集合
		let obj=selectObjByKey(item,"attributeName",text);
        //判断是否存在此对象
		if(obj){//先判断其规格选项是否在obj.attributeValue这个数组中
			return obj.attributeValue.indexOf(value)>=0;
		}else {
			 return false;
		}
	}






});	
